home *** CD-ROM | disk | FTP | other *** search
- package koala.dynamicjava.interpreter;
-
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.lang.reflect.Modifier;
- import koala.dynamicjava.util.AmbiguousFieldException;
- import koala.dynamicjava.util.ReflectionUtilities;
-
- public class InterpreterUtilities {
- public static final Byte ONE = new Byte((byte)1);
- // $FF: synthetic field
- private static Class class$Ljava$lang$String;
- // $FF: synthetic field
- private static Class class$Ljava$lang$Boolean;
- // $FF: synthetic field
- private static Class class$Ljava$lang$Byte;
- // $FF: synthetic field
- private static Class class$Ljava$lang$Integer;
- // $FF: synthetic field
- private static Class class$Ljava$lang$Character;
- // $FF: synthetic field
- private static Class class$Ljava$lang$Short;
- // $FF: synthetic field
- private static Class class$Ljava$lang$Long;
- // $FF: synthetic field
- private static Class class$Ljava$lang$Float;
- // $FF: synthetic field
- private static Class class$Ljava$lang$Double;
-
- public static Object equalTo(Class var0, Class var1, Object var2, Object var3) {
- return equalityOperation(var0, var1, var2, var3, koala.dynamicjava.interpreter.InterpreterUtilities.EqualToPredicate.INSTANCE);
- }
-
- public static Object notEqualTo(Class var0, Class var1, Object var2, Object var3) {
- return equalityOperation(var0, var1, var2, var3, koala.dynamicjava.interpreter.InterpreterUtilities.NotEqualToPredicate.INSTANCE);
- }
-
- protected static Object equalityOperation(Class var0, Class var1, Object var2, Object var3, BinaryPredicate var4) {
- if (var0.isPrimitive()) {
- if (var0 == Boolean.TYPE) {
- return var4.invoke((Boolean)var2, (Boolean)var3) ? Boolean.TRUE : Boolean.FALSE;
- } else {
- if (var0 == Character.TYPE) {
- var2 = new Integer((Character)var2);
- }
-
- if (var1 == Character.TYPE) {
- var3 = new Integer((Character)var3);
- }
-
- return var4.invoke(((Number)var2).doubleValue(), ((Number)var3).doubleValue()) ? Boolean.TRUE : Boolean.FALSE;
- }
- } else {
- return var4.invoke(var2, var3) ? Boolean.TRUE : Boolean.FALSE;
- }
- }
-
- public static Object add(Class var0, Object var1, Object var2) {
- return var0 == (class$Ljava$lang$String != null ? class$Ljava$lang$String : (class$Ljava$lang$String = class$("java.lang.String"))) ? "" + var1 + var2 : binaryArithmeticOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.AddOperation.INSTANCE);
- }
-
- public static Object subtract(Class var0, Object var1, Object var2) {
- return binaryArithmeticOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.SubtractOperation.INSTANCE);
- }
-
- public static Object multiply(Class var0, Object var1, Object var2) {
- return binaryArithmeticOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.MultiplyOperation.INSTANCE);
- }
-
- public static Object divide(Class var0, Object var1, Object var2) {
- return binaryArithmeticOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.DivideOperation.INSTANCE);
- }
-
- public static Object remainder(Class var0, Object var1, Object var2) {
- return binaryArithmeticOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.RemainderOperation.INSTANCE);
- }
-
- protected static Object binaryArithmeticOperation(Class var0, Object var1, Object var2, BinaryArithmeticOperation var3) {
- if (var1 instanceof Character) {
- var1 = new Integer((Character)var1);
- }
-
- if (var2 instanceof Character) {
- var2 = new Integer((Character)var2);
- }
-
- if (var0 == Integer.TYPE) {
- return new Integer(var3.invoke(((Number)var1).intValue(), ((Number)var2).intValue()));
- } else if (var0 == Long.TYPE) {
- return new Long(var3.invoke(((Number)var1).longValue(), ((Number)var2).longValue()));
- } else {
- return var0 == Float.TYPE ? new Float(var3.invoke(((Number)var1).floatValue(), ((Number)var2).floatValue())) : new Double(var3.invoke(((Number)var1).doubleValue(), ((Number)var2).doubleValue()));
- }
- }
-
- public static Object lessThan(Object var0, Object var1) {
- return relationalOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.LessThanOperation.INSTANCE);
- }
-
- public static Object lessOrEqual(Object var0, Object var1) {
- return relationalOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.LessOrEqualOperation.INSTANCE);
- }
-
- public static Object greaterThan(Object var0, Object var1) {
- return relationalOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.GreaterThanOperation.INSTANCE);
- }
-
- public static Object greaterOrEqual(Object var0, Object var1) {
- return relationalOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.GreaterOrEqualOperation.INSTANCE);
- }
-
- protected static Object relationalOperation(Object var0, Object var1, RelationalOperation var2) {
- if (var0 instanceof Character) {
- var0 = new Integer((Character)var0);
- }
-
- if (var1 instanceof Character) {
- var1 = new Integer((Character)var1);
- }
-
- return var2.invoke(((Number)var0).doubleValue(), ((Number)var1).doubleValue()) ? Boolean.TRUE : Boolean.FALSE;
- }
-
- public static Object bitAnd(Class var0, Object var1, Object var2) {
- return bitwiseOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.BitAndOperation.INSTANCE);
- }
-
- public static Object xOr(Class var0, Object var1, Object var2) {
- return bitwiseOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.XOrOperation.INSTANCE);
- }
-
- public static Object bitOr(Class var0, Object var1, Object var2) {
- return bitwiseOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.BitOrOperation.INSTANCE);
- }
-
- protected static Object bitwiseOperation(Class var0, Object var1, Object var2, BitwiseOperation var3) {
- if (var0 == Boolean.TYPE) {
- return new Boolean(var3.invoke((Boolean)var1, (Boolean)var2));
- } else {
- if (var1 instanceof Character) {
- var1 = new Integer((Character)var1);
- }
-
- if (var2 instanceof Character) {
- var2 = new Integer((Character)var2);
- }
-
- return var0 == Integer.TYPE ? new Integer(var3.invoke(((Number)var1).intValue(), ((Number)var2).intValue())) : new Long(var3.invoke(((Number)var1).longValue(), ((Number)var2).longValue()));
- }
- }
-
- public static Object shiftLeft(Class var0, Object var1, Object var2) {
- return shiftOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.ShiftLeftOperation.INSTANCE);
- }
-
- public static Object shiftRight(Class var0, Object var1, Object var2) {
- return shiftOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.ShiftRightOperation.INSTANCE);
- }
-
- public static Object unsignedShiftRight(Class var0, Object var1, Object var2) {
- return shiftOperation(var0, var1, var2, koala.dynamicjava.interpreter.InterpreterUtilities.UnsignedShiftRightOperation.INSTANCE);
- }
-
- protected static Object shiftOperation(Class var0, Object var1, Object var2, ShiftOperation var3) {
- if (var1 instanceof Character) {
- var1 = new Integer((Character)var1);
- }
-
- if (var2 instanceof Character) {
- var2 = new Integer((Character)var2);
- }
-
- return var0 == Integer.TYPE ? new Integer(var3.invoke(((Number)var1).intValue(), ((Number)var2).intValue())) : new Long(var3.invoke(((Number)var1).longValue(), ((Number)var2).intValue()));
- }
-
- public static Object plus(Class var0, Object var1) {
- return unaryOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.PlusOperation.INSTANCE);
- }
-
- public static Object minus(Class var0, Object var1) {
- return unaryOperation(var0, var1, koala.dynamicjava.interpreter.InterpreterUtilities.MinusOperation.INSTANCE);
- }
-
- public static Object unaryOperation(Class var0, Object var1, UnaryOperation var2) {
- if (var1 instanceof Character) {
- var1 = new Integer((Character)var1);
- }
-
- if (var0 == Integer.TYPE) {
- return new Integer(var2.invoke(((Number)var1).intValue()));
- } else if (var0 == Long.TYPE) {
- return new Long(var2.invoke(((Number)var1).longValue()));
- } else {
- return var0 == Float.TYPE ? new Float(var2.invoke(((Number)var1).floatValue())) : new Double(var2.invoke(((Number)var1).doubleValue()));
- }
- }
-
- public static Class getDeclaringClass(Class var0) {
- Class var1 = var0.getDeclaringClass();
- if (var1 == null) {
- try {
- Field var2 = var0.getField("declaring$Class$Reference$0");
- var1 = (Class)var2.get((Object)null);
- } catch (Exception var3) {
- }
- }
-
- return var1;
- }
-
- public static Field getOuterField(Class var0, String var1) throws NoSuchFieldException, AmbiguousFieldException {
- boolean var2 = Modifier.isStatic(var0.getModifiers());
-
- for(Class var3 = var0 != null ? getDeclaringClass(var0) : null; var3 != null; var3 = getDeclaringClass(var3)) {
- try {
- Field var4 = ReflectionUtilities.getField(var3, var1);
- if (!var2 || Modifier.isStatic(var4.getModifiers())) {
- return var4;
- }
- } catch (NoSuchFieldException var5) {
- }
-
- var2 |= Modifier.isStatic(var3.getModifiers());
- }
-
- throw new NoSuchFieldException(var1);
- }
-
- public static Method lookupOuterMethod(Class var0, String var1, Class[] var2) throws NoSuchMethodException {
- boolean var3 = Modifier.isStatic(var0.getModifiers());
-
- for(Class var4 = var0 != null ? getDeclaringClass(var0) : null; var4 != null; var4 = getDeclaringClass(var4)) {
- try {
- Method var5 = ReflectionUtilities.lookupMethod(var4, var1, var2);
- if (!var3 || Modifier.isStatic(var5.getModifiers())) {
- return var5;
- }
- } catch (NoSuchMethodException var6) {
- }
-
- var3 |= Modifier.isStatic(var4.getModifiers());
- }
-
- throw new NoSuchMethodException(var1);
- }
-
- public static boolean isValidAssignment(Class var0, Object var1) {
- Class var2 = var1 == null ? null : var1.getClass();
- if (var0 != null) {
- if (var0.isPrimitive()) {
- if (var0 == Boolean.TYPE && var2 != (class$Ljava$lang$Boolean != null ? class$Ljava$lang$Boolean : (class$Ljava$lang$Boolean = class$("java.lang.Boolean")))) {
- return false;
- }
-
- if (var0 == Byte.TYPE && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte")))) {
- if (var2 == (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer")))) {
- Number var4 = (Number)var1;
- return var4.intValue() == var4.byteValue();
- }
-
- return false;
- }
-
- if ((var0 == Short.TYPE || var2 == (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character")))) && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte"))) && var2 != (class$Ljava$lang$Short != null ? class$Ljava$lang$Short : (class$Ljava$lang$Short = class$("java.lang.Short"))) && var2 != (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character")))) {
- if (var2 == (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer")))) {
- Number var3 = (Number)var1;
- return var3.intValue() == var3.shortValue();
- }
-
- return false;
- }
-
- if (var0 == Integer.TYPE && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte"))) && var2 != (class$Ljava$lang$Short != null ? class$Ljava$lang$Short : (class$Ljava$lang$Short = class$("java.lang.Short"))) && var2 != (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character"))) && var2 != (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer")))) {
- return false;
- }
-
- if (var0 == Long.TYPE && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte"))) && var2 != (class$Ljava$lang$Short != null ? class$Ljava$lang$Short : (class$Ljava$lang$Short = class$("java.lang.Short"))) && var2 != (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character"))) && var2 != (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer"))) && var2 != (class$Ljava$lang$Long != null ? class$Ljava$lang$Long : (class$Ljava$lang$Long = class$("java.lang.Long")))) {
- return false;
- }
-
- if (var0 == Float.TYPE && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte"))) && var2 != (class$Ljava$lang$Short != null ? class$Ljava$lang$Short : (class$Ljava$lang$Short = class$("java.lang.Short"))) && var2 != (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character"))) && var2 != (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer"))) && var2 != (class$Ljava$lang$Long != null ? class$Ljava$lang$Long : (class$Ljava$lang$Long = class$("java.lang.Long"))) && var2 != (class$Ljava$lang$Float != null ? class$Ljava$lang$Float : (class$Ljava$lang$Float = class$("java.lang.Float")))) {
- return false;
- }
-
- if (var0 == Double.TYPE && var2 != (class$Ljava$lang$Byte != null ? class$Ljava$lang$Byte : (class$Ljava$lang$Byte = class$("java.lang.Byte"))) && var2 != (class$Ljava$lang$Short != null ? class$Ljava$lang$Short : (class$Ljava$lang$Short = class$("java.lang.Short"))) && var2 != (class$Ljava$lang$Character != null ? class$Ljava$lang$Character : (class$Ljava$lang$Character = class$("java.lang.Character"))) && var2 != (class$Ljava$lang$Integer != null ? class$Ljava$lang$Integer : (class$Ljava$lang$Integer = class$("java.lang.Integer"))) && var2 != (class$Ljava$lang$Long != null ? class$Ljava$lang$Long : (class$Ljava$lang$Long = class$("java.lang.Long"))) && var2 != (class$Ljava$lang$Float != null ? class$Ljava$lang$Float : (class$Ljava$lang$Float = class$("java.lang.Float"))) && var2 != (class$Ljava$lang$Double != null ? class$Ljava$lang$Double : (class$Ljava$lang$Double = class$("java.lang.Double")))) {
- return false;
- }
- } else if (var2 != null && !var0.isAssignableFrom(var2) && !var2.isAssignableFrom(var0)) {
- return false;
- }
- }
-
- return true;
- }
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
-
- protected InterpreterUtilities() {
- }
- }
-